// 0 0
// 0 1
// 0 2
// 0 4
// 0 8
// 0 65535
// 0 2147483648
// 0 2147483647
// 0 1152921504606846975
// 0 1152921504606846974
// 1 0
// 1 1
// 1 2
// 1 4
// 1 8
// 1 65535
// 1 2147483648
// 1 2147483647
// 1 1152921504606846975
// 1 1152921504606846974
// 2 0
// 2 1
// 2 2
// 2 4
// 2 8
// 2 65535
// 2 2147483648
// 2 2147483647
// 2 1152921504606846975
// 2 1152921504606846974
// 4 0
// 4 1
// 4 2
// 4 4
// 4 8
// 4 65535
// 4 2147483648
// 4 2147483647
// 4 1152921504606846975
// 4 1152921504606846974
// 8 0
// 8 1
// 8 2
// 8 4
// 8 8
// 8 65535
// 8 2147483648
// 8 2147483647

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll two[64];

ll q(ll a, ll b){
    cout << "? " << a << ' ' << b << '\n';
    cout.flush();
    ll num;
    cin >> num;
    return num;
}

void solve(){
    ll x = 0, y = 0, basea = 0,baseb = 0;
    ll q00 = q(basea, baseb);
    if(q00 == 0){
        cout << "! 0 0" << '\n';
        cout.flush();
        return;
    }
    for(int i = 1; i <= 60; i++){
        q00 = q(basea + 1, baseb + 1);
        ll q10 = q(two[i - 1] + basea + 1, baseb + 1);
        ll q01 = q(basea + 1, two[i - 1] + baseb + 1);
        if(q10 % two[i] == 0){
            y += two[i - 1];
            basea += two[i - 1];
            continue;
        }
        if(q01 % two[i] == 0){
            x += two[i - 1];
            baseb += two[i - 1];
            continue;
        }
        if(q00 % two[i] == 0){
            x += two[i - 1];
            y += two[i - 1];
        }else{
            basea += two[i - 1];
            baseb += two[i - 1];
        }
    }
    cout << "! " << x << ' ' << y << '\n';
    cout.flush();
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    ll temp = 1;
    for(int i = 0; i <= 61; i++){
        two[i] = temp;
        temp <<= 1;
    }

    int t=1;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}